/*
判断函数f：A->B是否是积性函数？ 是否是完全积性函数？
积性函数：∀x,y 属于A,且gcd(x,y) = 1 满足f (x*y) = f (x)*f (y) 。其中*运算，定义为：x*y mod m。
完全积性函数：∀x,y 属于A, 满足f (x*y) = f (x)*f (y) 。其中*运算，定义为：x*y mod m。
数据输入第一行有两个数字n和m。n表示函数关系的有序对个数，且n=|A|。数据保证有序对的前件枚举集合A所有元素且不重复。随后有n行，表示函数关系的有序对。
数据输出为两行。分别表示是否是积性函数？是否是完全积性函数？如果是输出Yes，否则输出No。
样例数据：
输入：
7 7
0 0
1 1
2 2
3 3
4 4
5 5
6 6
输出：
Yes
Yes*/


#include <iostream>
#include <map>

using namespace std;

int gcd(int m,int n)
{
  int temp;
  while( n != 0)
	{
		if(m < n)
		{
			temp = m;
			m = n;
			n = temp;
		}
		else
		{
			m = m - n;
		}
	}

  return m;
}

int main(void) {
  int m,n,x,y;
  std::map<int, int> numMap ;
  bool f1,f2; //f1完全积性
  f1 = f2 = true;
  cin >> n >> m;
  for (int e = 0; e < n; e++) {
    std::cin >> x >> y;
    numMap.insert(pair<int,int>(x,y));
  }

  map<int,int>::iterator start = numMap.begin();
  map<int,int>::iterator temp;

  for (; start != numMap.end() ; start++) {
    for(temp = start,temp++;temp!=numMap.end();temp++)
    {
      int mup = temp->first * start->first % m;
      if(temp->second * start->second % m != numMap[mup])
      {
        f1 = false;
        if(gcd(temp->first,temp->first) == 1)
        {
          f2 = false;
          start = numMap.end();
          break;
        }
      }
    }
  }

  if(f2) std::cout << "Yes" << '\n';
  else std::cout << "No" << '\n';

  if(f1) std::cout << "Yes" << '\n';
  else std::cout << "No" << '\n';

  return 0;
}
